package pl.edu.pk.psb.assembler;

import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import pl.edu.pk.psb.bc.bo.PolaczenieBo;
import pl.edu.pk.psb.bc.bo.PrzystanekBo;
import pl.edu.pk.psb.bc.bo.RodzajPolaczeniaBo;
import pl.edu.pk.psb.bc.ds.CenaDs;
import pl.edu.pk.psb.bc.dto.CenaDto;
import pl.edu.pk.psb.bc.dto.OdlegloscDto;
import pl.edu.pk.psb.bc.dto.PrzystanekDto;
import pl.edu.pk.psb.command.PrzystanekCommand;

@Component
public class PrzystanekCommandAssembler {

	@Autowired
	PrzystanekBo przystanekBo;

	@Autowired
	RodzajPolaczeniaBo polaczenieBo;

	public PrzystanekDto konwertuj(PrzystanekCommand cmd) {
		PrzystanekDto dto = new PrzystanekDto();
		dto.setNazwa(cmd.getNazwa());
		dto.setId(cmd.getId());
		dto.setRodzajPrzystanku(polaczenieBo.pobierzRodzajPolaczenia(cmd
				.getTypPolaczenia()));
		// Referencja do zbioru przystankow polaczonych
		Set<OdlegloscDto> odleglosc = dto.getOdleglosc();
		Set<CenaDto> cena = dto.getCena();
		dto.setMiasto(cmd.getMiasto());

		// Pobiera WSZYSTKIE PRZYSTANKI z Bazy. Jak zrobic, zeby pobieralo tylko
		// te, ktore sa polaczone z danym przystankiem?
		List<PrzystanekDto> listaPrzystankow = przystanekBo.pobierzPrzystanki();
		Iterator<Integer> it = cmd.getPrzystankiPolaczone().iterator();
		Iterator<Integer> it2 = cmd.getOdleglosci().iterator();
		Iterator<Double> it3 = cmd.getCenaPrzejazdu().iterator();
		if (it.hasNext() && it2.hasNext() && it3.hasNext()) {
			while (it.hasNext()) {
				Integer id = it.next();
				for (PrzystanekDto d : listaPrzystankow) {
					if (d.getId() == id) {
						odleglosc.add(new OdlegloscDto(dto, d, it2.next()));
						cena.add(new CenaDto(dto, d, it3.next()));
						break;
					}
				}
			}
		}
		return dto;
	}
}
